package cn.org.xwb.bookmall.admin.service;

import cn.org.xwb.bookmall.admin.vo.UploadProductVo;
import cn.org.xwb.bookmall.model.po.ProductCategory;
import cn.org.xwb.bookmall.model.po.ProductCategorySub;
import cn.org.xwb.bookmall.model.vo.ProductConditionVo;
import cn.org.xwb.common.model.vo.RespResult;

import java.util.List;

public interface AdminProductService {

    /**
     * 根据 id 查询指定商品的全部相关信息
     *
     * @param id
     * @return
     */
    RespResult<Object> selectProductAllById(Long id);

    /**
     * 更新商品销售量
     *
     * @return
     */
    RespResult<Object> updateAllProductSale();

    /**
     * 根据 id 删除商品(逻辑)
     *
     * @param productId
     * @return
     */
    RespResult<Object> removeParamByProductIdLogic(Long productId);

    /**
     * 根据商品 id 删除商品参数
     *
     * @param productId
     * @return
     */
    RespResult<Object> removeParamByProductId(Long productId);

    /**
     * 根据商品 id 删除商品选项
     *
     * @param productId
     * @return
     */
    RespResult<Object> removeOptionsByProductId(Long productId);

    /**
     * 根据商品 id 删除商品标签
     * @param productId
     * @return
     */
    RespResult<Object> removeLabelByProductId(Long productId);

    /**
     * 根据商品 id 删除商品图片
     *
     * @param productId
     * @return
     */
    RespResult<Object> removeImgByProductId(Long productId);

    /**
     * 根据 id 删除商品
     *
     * @param productId
     * @return
     */
    RespResult<Object> removeProductById(Long productId);

    /**
     * 添加商品分类，可以同时添加二级分类
     *
     * @param productCategory
     * @param subs
     * @return
     */
    RespResult<Object> addProductCategory(ProductCategory productCategory, List<ProductCategorySub> subs);

    /**
     * 添加二级商品分类
     *
     * @param productCategorySub
     * @return
     */
    RespResult<Object> addProductCategorySub(ProductCategorySub productCategorySub);

    /**
     * 修改一级商品分类
     *
     * @param productCategory
     * @return
     */
    RespResult<Object> updateProductCategory(ProductCategory productCategory);

    /**
     * 修改二级商品分类
     *
     * @param productCategorySub
     * @return
     */
    RespResult<Object> updateProductCategorySub(ProductCategorySub productCategorySub);

    RespResult<Object> deleteProductCategory(Long id, Long toId);

    RespResult<Object> deleteProductCategorySub(Long id, Long toId, Long toSubId);

    /**
     * 分页获取商品分类
     *
     * @param current
     * @param pageSize
     * @param disabled
     * @param nameMatch
     * @param codeMatch
     * @return
     */
    RespResult<Object> getProductCategoryPage(Integer current, Integer pageSize, Boolean disabled, String nameMatch, String codeMatch);

    /**
     * 获取所有的商品分类
     *
     * @return
     */
    RespResult<Object> getProductCategoryAll();

    /**
     * 上传商品
     *
     * @param uploadProductVo
     * @return
     */
    RespResult<Object> uploadProduct(UploadProductVo uploadProductVo);

    /**
     * 分页获取商品
     *
     * @param productConditionVo
     * @return
     */
    RespResult<Object> getProductPage(ProductConditionVo productConditionVo);



}
